www.gusucode.com > VC++仿XP免费Prof UIS界面库-源码程序 > VC++仿XP免费Prof UIS界面库-源码程序/code/Samples/FixedSizePanels/MainFrm.cpp
//Download by http://www.NewXing.com // MainFrm.cpp : implementation of the CMainFrame class // #include "stdafx.h" #include "FixedSizePanels.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDemoHtmlCtrl IMPLEMENT_DYNAMIC( CDemoHtmlCtrl, CWnd ); CDemoHtmlCtrl::CDemoHtmlCtrl() : m_pBrowser( NULL ) , m_bReflectParentSizing( false ) { } CDemoHtmlCtrl::~CDemoHtmlCtrl() { } BEGIN_MESSAGE_MAP(CDemoHtmlCtrl, CWnd) //{{AFX_MSG_MAP(CDemoHtmlCtrl) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDemoHtmlCtrl message handlers bool CDemoHtmlCtrl::Create( CWnd * pWndParent, CRect rectInit // = CRect(0,0,0,0) ) { UINT nID = pWndParent->GetDlgCtrlID(); CString sWindowName; pWndParent->GetWindowText( sWindowName ); if( !CreateControl( CLSID_WebBrowser, LPCTSTR(sWindowName), WS_VISIBLE|WS_CHILD, rectInit, pWndParent, nID ) ) { // if IWebBrowser2 is not created successfully ASSERT( FALSE ); DestroyWindow(); return false; } // if IWebBrowser2 is not created successfully LPUNKNOWN lpUnk = GetControlUnknown(); ASSERT( lpUnk != NULL ); HRESULT hr = lpUnk->QueryInterface(IID_IWebBrowser2, (void**) &m_pBrowser); if( FAILED(hr) ) { ASSERT( FALSE ); DestroyWindow(); return false; } return true; } void CDemoHtmlCtrl::GoBack() { ASSERT_VALID( this ); ASSERT( m_pBrowser != NULL ); m_pBrowser->GoBack(); } void CDemoHtmlCtrl::GoForward() { ASSERT_VALID( this ); ASSERT( m_pBrowser != NULL ); m_pBrowser->GoForward(); } void CDemoHtmlCtrl::Refresh() { ASSERT_VALID( this ); ASSERT( m_pBrowser != NULL ); m_pBrowser->Refresh(); } void CDemoHtmlCtrl::NavigateURL( LPCTSTR lpszURL ) { ASSERT_VALID( this ); ASSERT( m_pBrowser != NULL ); COleSafeArray vPostData; COleVariant vURL( lpszURL, VT_BSTR ); COleVariant vHeaders( LPCTSTR(NULL), VT_BSTR); COleVariant vTargetFrameName( LPCTSTR(NULL), VT_BSTR ); COleVariant vFlags( 0L, VT_I4 ); m_pBrowser->Navigate2( vURL, vFlags, vTargetFrameName, vPostData, vHeaders ); } void CDemoHtmlCtrl::NavigateResourceID( UINT nResourceID ) { ASSERT_VALID( this ); ASSERT( m_pBrowser != NULL ); CString sAppName; ::GetModuleFileName( NULL, sAppName.GetBuffer( _MAX_PATH + 1 ), _MAX_PATH ); sAppName.ReleaseBuffer(); CString sResourseID; sResourseID.Format( _T("%d"), INT(nResourceID) ); CString sNavigatePath; sNavigatePath = _T("res://") + sAppName + _T("/") //+ _T(".exe/") + sResourseID ; NavigateURL( sNavigatePath ); } ///////////////////////////////////////////////////////////////////////////// // CPanelEmpty IMPLEMENT_DYNAMIC(CPanelEmpty, CExtPanelControlBar) CPanelEmpty::CPanelEmpty() { } CPanelEmpty::~CPanelEmpty() { } CSize CPanelEmpty::OnQueryFixedBarNewSize( CExtPanelControlBar::e_fixed_bar_size_query_t eWhichSizeNeedToKnow ) const { ASSERT_VALID( this ); switch( eWhichSizeNeedToKnow ) { case CExtPanelControlBar::e_fixed_bar_size_query_t::__FSQ_DOCKED_H: return CSize(150,50); case CExtPanelControlBar::e_fixed_bar_size_query_t::__FSQ_DOCKED_V: return CSize(50,150); default: return CSize(150,150); } // switch( eWhichSizeNeedToKnow ) } BEGIN_MESSAGE_MAP(CPanelEmpty, CExtPanelControlBar) //{{AFX_MSG_MAP(CPanelEmpty) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPanelCustomDrawn IMPLEMENT_DYNAMIC(CPanelCustomDrawn, CPanelEmpty) CPanelCustomDrawn::CPanelCustomDrawn() { } CPanelCustomDrawn::~CPanelCustomDrawn() { } BEGIN_MESSAGE_MAP(CPanelCustomDrawn, CPanelEmpty) //{{AFX_MSG_MAP(CPanelCustomDrawn) ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP() void CPanelCustomDrawn::OnPaint() { ASSERT_VALID( this ); CPaintDC dcPaint( this ); CExtMemoryDC dc( &dcPaint ); CRect rcClient; GetClientRect( &rcClient ); ASSERT( GetWindow( GW_CHILD ) == NULL ); // fill gradient & draw text dc.FillSolidRect( &rcClient, g_PaintManager->GetColor( CExtPaintManager::CLR_3DFACE_OUT ) ); rcClient.DeflateRect( 2, 2 ); COLORREF clrFc = g_PaintManager->GetColor(COLOR_3DFACE); COLORREF clrDk = g_PaintManager->GetColor(COLOR_3DDKSHADOW); COLORREF clrHi = g_PaintManager->GetColor(COLOR_3DHILIGHT); COLORREF clrLo = g_PaintManager->GetColor(COLOR_3DSHADOW); dc.Draw3dRect( &rcClient, clrFc, clrDk ); rcClient.DeflateRect( 1, 1 ); dc.Draw3dRect( &rcClient, clrHi, clrLo ); rcClient.DeflateRect( 1, 1 ); dc.Draw3dRect( &rcClient, clrLo, clrHi ); rcClient.DeflateRect( 1, 1 ); dc.Draw3dRect( &rcClient, clrDk, clrFc ); rcClient.DeflateRect( 2, 2 ); UINT nDockBarID = GetSafeDockBarDlgCtrlID(); CExtPaintManager::stat_PaintGradientRect( dc, rcClient, RGB( 128, 128, 255 ), RGB( 0, 0, 0 ), (nDockBarID==AFX_IDW_DOCKBAR_LEFT || nDockBarID==AFX_IDW_DOCKBAR_RIGHT) ? true : false ); CRect rcDrawText( rcClient ); rcDrawText.DeflateRect( 5, 5 ); CRect rcDrawTextShadow( rcDrawText ); CString sText; CFont * pFont = &g_PaintManager->m_FontNormal; switch( nDockBarID ) { case AFX_IDW_DOCKBAR_TOP: sText = _T("Docked at top"); rcDrawTextShadow.OffsetRect( 1, 1 ); break; case AFX_IDW_DOCKBAR_BOTTOM: sText = _T("Docked at bottom"); rcDrawTextShadow.OffsetRect( 1, 1 ); break; case AFX_IDW_DOCKBAR_LEFT: sText = _T("Docked at left"); pFont = &g_PaintManager->m_FontNormalVert; rcDrawText.OffsetRect( rcDrawText.Width(), 0 ); rcDrawText.OffsetRect( -1, -2 ); rcDrawTextShadow = rcDrawText; rcDrawTextShadow.OffsetRect( 1, 1 ); break; case AFX_IDW_DOCKBAR_RIGHT: sText = _T("Docked at right"); pFont = &g_PaintManager->m_FontNormalVert; rcDrawText.OffsetRect( rcDrawText.Width(), 0 ); rcDrawText.OffsetRect( -1, -2 ); rcDrawTextShadow = rcDrawText; rcDrawTextShadow.OffsetRect( 1, 1 ); break; default: ASSERT( nDockBarID == AFX_IDW_DOCKBAR_FLOAT ); sText = _T("Floating"); rcDrawTextShadow.OffsetRect( 1, 1 ); break; } // switch( nDockBarID ) CFont * pOldFont = dc.SelectObject( pFont ); int nOldBkMode = dc.SetBkMode( TRANSPARENT ); COLORREF clrOldTextColor = dc.SetTextColor( RGB(128,128,128) ); dc.DrawText( sText, &rcDrawTextShadow, DT_SINGLELINE|DT_NOCLIP ); dc.SetTextColor( RGB(255,255,255) ); dc.DrawText( sText, &rcDrawText, DT_SINGLELINE|DT_NOCLIP ); dc.SetTextColor( clrOldTextColor ); dc.SetBkMode( nOldBkMode ); dc.SelectObject( pOldFont ); } ///////////////////////////////////////////////////////////////////////////// // CMainFrame::CColorStatic CMainFrame::CColorStatic::CColorStatic() : m_clrIn( RGB(0,0,0) ) , m_clrOut( RGB(255,255,255) ) { } LRESULT CMainFrame::CColorStatic::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if( message == WM_PAINT ) { CPaintDC dc( this ); CRect rcClient; GetClientRect( &rcClient ); dc.FillRect( &rcClient, &g_PaintManager->m_brushLightDefault ); COLORREF clrLight = g_PaintManager->GetColor(COLOR_3DHILIGHT); COLORREF clrDkShadow = g_PaintManager->GetColor(COLOR_3DDKSHADOW); COLORREF clrFace = g_PaintManager->GetColor(COLOR_3DFACE); COLORREF clrShadow = g_PaintManager->GetColor(COLOR_3DSHADOW); dc.Draw3dRect( &rcClient, clrShadow, clrLight ); rcClient.DeflateRect( 1, 1 ); dc.Draw3dRect( &rcClient, clrDkShadow, clrFace ); rcClient.DeflateRect( 1, 1 ); CRect rcButtonIn; GetWindow(GW_HWNDNEXT)->GetWindowRect( &rcButtonIn ); rcButtonIn.OffsetRect( -rcButtonIn.TopLeft() ); rcButtonIn.InflateRect( 1, 1 ); rcButtonIn.OffsetRect( rcClient.TopLeft() ); CRect rcButtonOut( rcButtonIn ); rcButtonOut.OffsetRect( rcButtonOut.Width()/2, rcButtonOut.Height()/2 ); CRect rcUnion( rcButtonIn.left, rcButtonIn.top, rcButtonOut.right, rcButtonOut.bottom ); CPoint ptOffset( ( rcClient.Width() - rcUnion.Width() ) / 2 + 1, ( rcClient.Height() - rcUnion.Height() ) / 2 + 1 ); rcButtonIn.OffsetRect( ptOffset ); rcButtonOut.OffsetRect( ptOffset ); dc.FillSolidRect( &rcButtonOut, m_clrOut ); dc.Draw3dRect( &rcButtonOut, clrFace, clrDkShadow ); rcButtonOut.DeflateRect( 1, 1 ); dc.Draw3dRect( &rcButtonOut, clrLight, clrShadow ); rcButtonOut.DeflateRect( 1, 1 ); dc.Draw3dRect( &rcButtonOut, clrFace, clrFace ); dc.FillSolidRect( &rcButtonIn, m_clrIn ); dc.Draw3dRect( &rcButtonIn, clrFace, clrDkShadow ); rcButtonIn.DeflateRect( 1, 1 ); dc.Draw3dRect( &rcButtonIn, clrLight, clrShadow ); rcButtonIn.DeflateRect( 1, 1 ); dc.Draw3dRect( &rcButtonIn, clrFace, clrFace ); return 0; } // if( message == WM_PAINT ) if( message == WM_ERASEBKGND ) { return (!0); } // if( message == WM_ERASEBKGND ) return CStatic::WindowProc(message,wParam,lParam); } ///////////////////////////////////////////////////////////////////////////// // CMainFrame::CDynamicButton void CMainFrame::CDynamicButton::_OnClick( bool bSelectAny, bool bSeparatedDropDownClicked ) { ASSERT_VALID( this ); bSelectAny; bSeparatedDropDownClicked; CFrameWnd * pFrame = GetParentFrame(); ASSERT_VALID( pFrame ); if( pFrame->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)) ) { pFrame = pFrame->GetParentFrame(); ASSERT_VALID( pFrame ); } pFrame->SetFocus(); ASSERT_KINDOF( CMainFrame, pFrame ); if( ((CMainFrame*)pFrame)->m_hWndSelectedToolButton != NULL ) { ::InvalidateRect( ((CMainFrame*)pFrame)->m_hWndSelectedToolButton, NULL, FALSE ); } ((CMainFrame*)pFrame)->m_hWndSelectedToolButton = m_hWnd; Invalidate(); pFrame->SendMessage( WM_COMMAND, (WPARAM)GetDlgCtrlID(), (LPARAM)m_hWnd ); } void CMainFrame::CDynamicButton::_RenderImpl( CDC & dc, bool bTransparent // = false ) { ASSERT_VALID( this ); CRect rectClient; GetClientRect( &rectClient ); CString sWindowText( _T("") ); GetWindowText( sWindowText ); bool bDrawFocusRect = false; // (GetFocus() == this) ? true : false; bool bDefault = GetDefault() ? true : false; bool bPushed = (m_bPushed || GetCheck()) ? true : false; bool bEnabled = IsWindowEnabled() ? true : false; bool bFlat = GetFlat() ? true : false; bool bHover = ( m_bMouseOver && !CExtPopupMenuWnd::IsMenuTracking() ) ? true : false; HICON hIcon = (bHover) ? m_hIconIn : m_hIconOut; if( GetParent()->IsKindOf(RUNTIME_CLASS(CControlBar)) ) { bDrawFocusRect = false; bFlat = true; } if( !bPushed ) { CFrameWnd * pFrame = GetParentFrame(); ASSERT_VALID( pFrame ); if( pFrame->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)) ) { pFrame = pFrame->GetParentFrame(); ASSERT_VALID( pFrame ); } ASSERT_KINDOF( CMainFrame, pFrame ); if( ((CMainFrame*)pFrame)->m_hWndSelectedToolButton == m_hWnd ) bPushed = bHover = true; } if( (! (bHover || bPushed) ) && g_PaintManager->GetCb2DbTransparentMode(this) ) { CExtPaintManager::stat_ExcludeChildAreas( dc, GetSafeHwnd(), CExtPaintManager::stat_DefExcludeChildAreaCallback ); g_PaintManager->PaintDockerBkgnd( dc, this ); bTransparent = true; } CExtCmdIcon _icon( hIcon, false ); CExtPaintManager::PAINTPUSHBUTTONDATA _ppbd( this, true, rectClient, (LPCTSTR)sWindowText, &_icon, bFlat, bHover, bPushed, false, bEnabled, m_bDrawBorder ? true : false, bDrawFocusRect, bDefault, m_nAlign, NULL, _IsMenuAvail(), 0, bTransparent ); _ppbd.m_bSeparatedDropDown = m_bSeparatedDropDown ? true : false; if( _ppbd.m_bSeparatedDropDown && m_nTrackingHT == 2 && _ppbd.m_bPushed ) { _ppbd.m_bPushed = false; _ppbd.m_bPushedDropDown = true; // _ppbd.m_bHover = false; } g_PaintManager->PaintPushButton( dc, _ppbd ); _icon.DetachAsHICON(); } ///////////////////////////////////////////////////////////////////////////// // CMainFrame::CDynamicPaletteButton CMainFrame::CDynamicPaletteButton::CDynamicPaletteButton( COLORREF clr ) : m_clr( clr ) { } LRESULT CMainFrame::CDynamicPaletteButton::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if( message == WM_LBUTTONDOWN || message == WM_RBUTTONDOWN ) { CFrameWnd * pFrame = GetParentFrame(); ASSERT_VALID( pFrame ); if( pFrame->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)) ) { pFrame = pFrame->GetParentFrame(); ASSERT_VALID( pFrame ); } pFrame->SetFocus(); ASSERT_KINDOF( CMainFrame, pFrame ); Invalidate(); WPARAM wParam = (WPARAM)GetDlgCtrlID(); if( message == WM_RBUTTONDOWN ) wParam += 160; pFrame->SendMessage( WM_COMMAND, wParam, (LPARAM)m_hWnd ); return 0L; } if( message == WM_LBUTTONUP || message == WM_RBUTTONUP ) { return 0L; } return CDynamicButton::WindowProc(message,wParam,lParam); } void CMainFrame::CDynamicPaletteButton::_OnClick( bool bSelectAny, bool bSeparatedDropDownClicked ) { ASSERT_VALID( this ); bSelectAny; bSeparatedDropDownClicked; CFrameWnd * pFrame = GetParentFrame(); ASSERT_VALID( pFrame ); if( pFrame->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)) ) { pFrame = pFrame->GetParentFrame(); ASSERT_VALID( pFrame ); } pFrame->SetFocus(); ASSERT_KINDOF( CMainFrame, pFrame ); Invalidate(); pFrame->SendMessage( WM_COMMAND, (WPARAM)GetDlgCtrlID(), (LPARAM)m_hWnd ); } void CMainFrame::CDynamicPaletteButton::_RenderImpl( // non-buffered paint CDC & dc, bool bTransparent // = false ) { ASSERT_VALID( this ); bTransparent; CRect rectClient; GetClientRect( &rectClient ); bool bPushed = (m_bPushed || GetCheck()) ? true : false; bool bHover = ( m_bMouseOver && !CExtPopupMenuWnd::IsMenuTracking() ) ? true : false; dc.FillSolidRect( &rectClient, m_clr ); COLORREF clrLight = g_PaintManager->GetColor(COLOR_3DHILIGHT); COLORREF clrDkShadow = g_PaintManager->GetColor(COLOR_3DDKSHADOW); if( bPushed || bHover ) { COLORREF clrFace = g_PaintManager->GetColor(COLOR_3DFACE); COLORREF clrShadow = g_PaintManager->GetColor(COLOR_3DSHADOW); dc.Draw3dRect( &rectClient, clrShadow, clrLight ); rectClient.DeflateRect( 1, 1 ); dc.Draw3dRect( &rectClient, clrDkShadow, clrFace ); } else { dc.Draw3dRect( &rectClient, clrDkShadow, clrLight ); } } ///////////////////////////////////////////////////////////////////////////// // CMainFrame IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_WM_SETFOCUS() ON_COMMAND(ID_VIEW_LIKE_OFFICE_2K, OnViewLikeOffice2k) ON_UPDATE_COMMAND_UI(ID_VIEW_LIKE_OFFICE_2K, OnUpdateViewLikeOffice2k) ON_COMMAND(ID_VIEW_LIKE_OFFICE_XP, OnViewLikeOfficeXp) ON_UPDATE_COMMAND_UI(ID_VIEW_LIKE_OFFICE_XP, OnUpdateViewLikeOfficeXp) ON_COMMAND(ID_VIEW_LIKE_OFFICE_2003, OnViewLikeOffice2003) ON_UPDATE_COMMAND_UI(ID_VIEW_LIKE_OFFICE_2003, OnUpdateViewLikeOffice2003) //}}AFX_MSG_MAP ON_COMMAND_EX( ID_VIEW_MENUBAR, OnBarCheck ) ON_UPDATE_COMMAND_UI( ID_VIEW_MENUBAR, OnUpdateControlBarMenu ) ON_COMMAND_EX( IDR_TOOLBAR2, OnBarCheck ) ON_UPDATE_COMMAND_UI( IDR_TOOLBAR2, OnUpdateControlBarMenu ) ON_COMMAND_EX( ID_VIEW_PANEL_EMPTY, OnBarCheck ) ON_UPDATE_COMMAND_UI( ID_VIEW_PANEL_EMPTY, OnUpdateControlBarMenu ) ON_COMMAND_EX( ID_VIEW_PANEL_CUSTOM_DRAWN, OnBarCheck ) ON_UPDATE_COMMAND_UI( ID_VIEW_PANEL_CUSTOM_DRAWN, OnUpdateControlBarMenu ) ON_COMMAND_EX( ID_VIEW_PANEL_EDIT, OnBarCheck ) ON_UPDATE_COMMAND_UI( ID_VIEW_PANEL_EDIT, OnUpdateControlBarMenu ) ON_COMMAND_EX( ID_VIEW_PANEL_DIALOG, OnBarCheck ) ON_UPDATE_COMMAND_UI( ID_VIEW_PANEL_DIALOG, OnUpdateControlBarMenu ) ON_COMMAND_EX( ID_VIEW_PANEL_TOOLS, OnBarCheck ) ON_UPDATE_COMMAND_UI( ID_VIEW_PANEL_TOOLS, OnUpdateControlBarMenu ) ON_COMMAND_EX( ID_VIEW_PANEL_PALETTE, OnBarCheck ) ON_UPDATE_COMMAND_UI( ID_VIEW_PANEL_PALETTE, OnUpdateControlBarMenu ) ON_COMMAND_EX( ID_VIEW_PANEL_RESIZABLE1, OnBarCheck ) ON_UPDATE_COMMAND_UI( ID_VIEW_PANEL_RESIZABLE1, OnUpdateControlBarMenu ) ON_COMMAND_EX( ID_VIEW_PANEL_RESIZABLE2, OnBarCheck ) ON_UPDATE_COMMAND_UI( ID_VIEW_PANEL_RESIZABLE2, OnUpdateControlBarMenu ) ON_COMMAND_RANGE( IDC_BUTTON1, IDC_BUTTON16, OnClickedToolButton ) ON_COMMAND_RANGE( IDC_BUTTON17, IDC_BUTTON176, OnClickedPaletteButtonL ) ON_COMMAND_RANGE( (IDC_BUTTON17+160), (IDC_BUTTON176+160), OnClickedPaletteButtonR ) END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; ///////////////////////////////////////////////////////////////////////////// // CMainFrame construction/destruction CMainFrame::CMainFrame() { m_hWndSelectedToolButton = NULL; g_PaintManager.InstallPaintManager( new CExtPaintManager ); // window placement persistence ::memset( &m_dataFrameWP, 0, sizeof(WINDOWPLACEMENT) ); m_dataFrameWP.length = sizeof(WINDOWPLACEMENT); m_dataFrameWP.showCmd = SW_HIDE; } CMainFrame::~CMainFrame() { } static UINT g_statBasicCommands[] = { ID_APP_ABOUT, ID_APP_EXIT, ID_VIEW_MENUBAR, ID_VIEW_TOOLBAR, IDR_TOOLBAR2, ID_VIEW_STATUS_BAR, ID_VIEW_PANEL_EMPTY, ID_VIEW_PANEL_CUSTOM_DRAWN, ID_VIEW_PANEL_EDIT, ID_VIEW_PANEL_DIALOG, ID_VIEW_PANEL_TOOLS, ID_VIEW_PANEL_PALETTE, ID_VIEW_PANEL_RESIZABLE1, ID_VIEW_PANEL_RESIZABLE2, 0, // end of list }; int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // create a view to occupy the client area of the frame if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) { TRACE0("Failed to create view window\n"); return -1; } CWinApp * pApp = ::AfxGetApp(); ASSERT( pApp != NULL ); ASSERT( pApp->m_pszRegistryKey != NULL ); ASSERT( pApp->m_pszRegistryKey[0] != _T('\0') ); ASSERT( pApp->m_pszProfileName != NULL ); ASSERT( pApp->m_pszProfileName[0] != _T('\0') ); ASSERT( pApp->m_pszProfileName != NULL ); g_CmdManager->ProfileSetup( pApp->m_pszProfileName, GetSafeHwnd() ); VERIFY( g_CmdManager->UpdateFromMenu( pApp->m_pszProfileName, IDR_MAINFRAME ) ); if( !m_wndMenuBar.Create( NULL, this, ID_VIEW_MENUBAR ) ) { TRACE0("Failed to create menubar\n"); return -1; // failed to create } if( !m_wndToolBar.Create( _T("ToolBar"), this, AFX_IDW_TOOLBAR ) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME) ) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if( !m_wndToolBar2.Create( _T("ToolBar2"), this, IDR_TOOLBAR2 ) || !m_wndToolBar2.LoadToolBar(IDR_TOOLBAR2) ) { TRACE0("Failed to create toolbar2\n"); return -1; // fail to create } CExtCmdItem * pCmdItem; pCmdItem = g_CmdManager->CmdGetPtr( pApp->m_pszProfileName, ID_VIEW_LIKE_OFFICE_2K ); ASSERT( pCmdItem != NULL ); pCmdItem->m_sToolbarText = _T("Show me 2000"); pCmdItem = g_CmdManager->CmdGetPtr( pApp->m_pszProfileName, ID_VIEW_LIKE_OFFICE_XP ); ASSERT( pCmdItem != NULL ); pCmdItem->m_sToolbarText = _T("Toggle to modern XP"); pCmdItem = g_CmdManager->CmdGetPtr( pApp->m_pszProfileName, ID_VIEW_LIKE_OFFICE_2003 ); ASSERT( pCmdItem != NULL ); pCmdItem->m_sToolbarText = _T("I like 2003"); if( !m_wndPanelEmpty.Create( _T("Empty Panel"), this, ID_VIEW_PANEL_EMPTY, WS_CHILD|WS_VISIBLE |CBRS_RIGHT|CBRS_GRIPPER|CBRS_TOOLTIPS |CBRS_FLYBY|CBRS_SIZE_DYNAMIC |CBRS_HIDE_INPLACE ) || !m_wndPanelCustomDrawn.Create( _T("Custom-drawn Panel"), this, ID_VIEW_PANEL_CUSTOM_DRAWN, WS_CHILD|WS_VISIBLE |CBRS_RIGHT|CBRS_GRIPPER|CBRS_TOOLTIPS |CBRS_FLYBY|CBRS_SIZE_DYNAMIC |CBRS_HIDE_INPLACE ) || !m_wndPanelEdit.Create( _T("Panel With Edit Control"), this, ID_VIEW_PANEL_EDIT, WS_CHILD|WS_VISIBLE |CBRS_LEFT|CBRS_GRIPPER|CBRS_TOOLTIPS |CBRS_FLYBY|CBRS_SIZE_DYNAMIC |CBRS_HIDE_INPLACE ) || !m_wndEdit.Create( WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL |ES_MULTILINE|ES_WANTRETURN |ES_AUTOHSCROLL|ES_AUTOVSCROLL , CRect(0,0,160,80), &m_wndPanelEdit, UINT(IDC_STATIC) ) || !m_wndPanelDialog.Create( _T("Panel With Dialog"), this, ID_VIEW_PANEL_DIALOG, WS_CHILD|WS_VISIBLE |CBRS_LEFT|CBRS_GRIPPER|CBRS_TOOLTIPS |CBRS_FLYBY|CBRS_SIZE_DYNAMIC |CBRS_HIDE_INPLACE ) || !m_dlgForPanelDialog.Create( IDD_DIALOG_FOR_PANEL, &m_wndPanelDialog ) || !m_wndPanelTools.Create( _T("Tools Panel"), this, ID_VIEW_PANEL_TOOLS, WS_CHILD|WS_VISIBLE |CBRS_RIGHT|CBRS_GRIPPER|CBRS_TOOLTIPS |CBRS_FLYBY|CBRS_SIZE_DYNAMIC |CBRS_HIDE_INPLACE ) || !m_dlgForPanelTools.Create( IDD_DIALOG_TOOLS, &m_wndPanelTools ) || !m_wndPanelPalette.Create( _T("Palette Panel"), this, ID_VIEW_PANEL_PALETTE, WS_CHILD|WS_VISIBLE |CBRS_BOTTOM|CBRS_GRIPPER|CBRS_TOOLTIPS |CBRS_FLYBY|CBRS_SIZE_DYNAMIC |CBRS_HIDE_INPLACE ) || !m_dlgForPanelPalette.Create( IDD_DIALOG_PALETTE, &m_wndPanelPalette ) || !m_wndResizableBar1.Create( _T("Resizable panel 1 (in fixed mode)"), this, ID_VIEW_PANEL_RESIZABLE1 ) || !m_wndHtmlCtrl1.Create( &m_wndResizableBar1, CRect( 0, 0, 150, 150 ) ) || !m_wndResizableBar2.Create( _T("Resizable panel 2 (in fixed mode)"), this, ID_VIEW_PANEL_RESIZABLE2 ) || !m_wndHtmlCtrl2.Create( &m_wndResizableBar2, CRect( 0, 0, 150, 150 ) ) ) { TRACE0("Failed to create bars/panels\n"); return -1; // fail to create } m_wndHtmlCtrl1.NavigateResourceID( IDR_HTML_DEMO_PAGE1 ); m_wndHtmlCtrl2.NavigateResourceID( IDR_HTML_DEMO_PAGE2 ); m_wndEdit.ModifyStyleEx(0,WS_EX_CLIENTEDGE,SWP_FRAMECHANGED); m_wndEdit.SetFont( CFont::FromHandle( (HFONT)::GetStockObject(DEFAULT_GUI_FONT) ) ); m_wndEdit.SetWindowText( _T("Fixed size panel\r\nwith edit control") ); m_dlgForPanelDialog.ShowSizeGrip( FALSE ); m_dlgForPanelTools.ShowSizeGrip( FALSE ); CImageList _ilTools; VERIFY( _ilTools.Create( IDB_BITMAP_TOOLS, 16, 1, RGB(255,0,255) ) ); HWND hWndToolBtn = ::GetWindow( m_dlgForPanelTools.m_hWnd, GW_CHILD ); for( int iToolBtn=0; iToolBtn < 16; iToolBtn++, hWndToolBtn = ::GetWindow(hWndToolBtn,GW_HWNDNEXT) ) { ASSERT( hWndToolBtn != NULL ); ASSERT( ::IsWindow(hWndToolBtn) ); if( iToolBtn == 0 ) { m_hWndSelectedToolButton = hWndToolBtn; ::InvalidateRect( m_hWndSelectedToolButton, NULL, FALSE ); } CDynamicButton * pBtn = new CDynamicButton; pBtn->SubclassWindow( hWndToolBtn ); pBtn->SetFlat( TRUE ); pBtn->SetIcon( _ilTools.ExtractIcon( iToolBtn ) ); CExtSafeString sToolTip; sToolTip.Format( _T("Tool button %d"), iToolBtn + 1 ); pBtn->SetTooltipText( sToolTip ); } hWndToolBtn = ::GetWindow( m_dlgForPanelPalette.m_hWnd, GW_CHILD ); ASSERT( hWndToolBtn != NULL ); ASSERT( ::IsWindow(hWndToolBtn) ); m_wndColorStatic.SubclassWindow( hWndToolBtn ); hWndToolBtn = ::GetWindow(hWndToolBtn,GW_HWNDNEXT); for( iToolBtn=0; iToolBtn < 160; iToolBtn++, hWndToolBtn = ::GetWindow(hWndToolBtn,GW_HWNDNEXT) ) { ASSERT( hWndToolBtn != NULL ); ASSERT( ::IsWindow(hWndToolBtn) ); COLORREF clr; if( iToolBtn < 32 ) { double fColorSrc = double(iToolBtn)/32.0; clr = CExtPaintManager::stat_HLStoRGB( 0.0, sqrt( fColorSrc ), 0.0 ); } // if( iToolBtn < 32 ) else { int iColorSrc = iToolBtn-32; int iSat = iColorSrc/32; ASSERT( iSat >= 0 && iSat <= 3 ); double fSat = 0.15; if( iSat == 1 ) fSat = 0.3; else if( iSat == 2 ) fSat = 0.5; else if( iSat == 3 ) fSat = 1.0; iColorSrc = iColorSrc % 32; double fColorSrc = double(iColorSrc)/32.0; clr = CExtPaintManager::stat_HLStoRGB( fColorSrc, 0.5, fSat ); } // else from if( iToolBtn < 32 ) CDynamicPaletteButton * pBtn = new CDynamicPaletteButton( clr ); pBtn->SubclassWindow( hWndToolBtn ); CExtSafeString sToolTip; sToolTip.Format( _T("Palette button %d - #%02X%02X%02X"), iToolBtn + 1, int( GetRValue(clr) ), int( GetGValue(clr) ), int( GetBValue(clr) ) ); pBtn->SetTooltipText( sToolTip ); } if( !m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators( indicators, sizeof(indicators) / sizeof(UINT) ) ) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY); m_wndPanelEmpty.EnableDocking(CBRS_ALIGN_ANY); m_wndPanelCustomDrawn.EnableDocking(CBRS_ALIGN_ANY); m_wndPanelEdit.EnableDocking(CBRS_ALIGN_ANY); m_wndPanelDialog.EnableDocking(CBRS_ALIGN_ANY); m_wndPanelTools.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT); m_wndPanelPalette.EnableDocking(CBRS_ALIGN_BOTTOM); m_wndResizableBar1.EnableDocking(CBRS_ALIGN_ANY); m_wndResizableBar2.EnableDocking(CBRS_ALIGN_ANY); if( !CExtControlBar::FrameEnableDocking(this) ) { ASSERT( FALSE ); return -1; } VERIFY( g_CmdManager->SetBasicCommands( pApp->m_pszProfileName, g_statBasicCommands ) ); if( !CExtControlBar::ProfileBarStateLoad( this, pApp->m_pszRegistryKey, pApp->m_pszProfileName, pApp->m_pszProfileName, &m_dataFrameWP ) ) { DockControlBar( &m_wndMenuBar ); DockControlBar( &m_wndToolBar ); RecalcLayout(); CRect wrAlredyDockedBar; m_wndToolBar.GetWindowRect( &wrAlredyDockedBar ); wrAlredyDockedBar.OffsetRect( 1, 0 ); DockControlBar( &m_wndToolBar2, AFX_IDW_DOCKBAR_TOP, &wrAlredyDockedBar ); DockControlBar( &m_wndPanelCustomDrawn ); m_wndPanelCustomDrawn.GetWindowRect( &wrAlredyDockedBar ); wrAlredyDockedBar.OffsetRect( 0, 1 ); DockControlBar( &m_wndPanelEmpty, AFX_IDW_DOCKBAR_RIGHT, &wrAlredyDockedBar ); DockControlBar( &m_wndPanelEdit ); m_wndPanelEdit.GetWindowRect( &wrAlredyDockedBar ); wrAlredyDockedBar.OffsetRect( 0, 1 ); DockControlBar( &m_wndPanelDialog, AFX_IDW_DOCKBAR_LEFT, &wrAlredyDockedBar ); DockControlBar( &m_wndPanelTools ); DockControlBar( &m_wndPanelPalette ); DockControlBar( &m_wndResizableBar1, AFX_IDW_DOCKBAR_LEFT ); DockControlBar( &m_wndResizableBar2, AFX_IDW_DOCKBAR_RIGHT ); ShowControlBar( &m_wndPanelEmpty, FALSE, TRUE ); ShowControlBar( &m_wndPanelEdit, FALSE, TRUE ); ShowControlBar( &m_wndPanelDialog, FALSE, TRUE ); ShowControlBar( &m_wndResizableBar2, FALSE, TRUE ); RecalcLayout(); } g_CmdManager->SerializeState( pApp->m_pszProfileName, pApp->m_pszRegistryKey, pApp->m_pszProfileName, false ); return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.dwExStyle &= ~WS_EX_CLIENTEDGE; cs.lpszClass = AfxRegisterWndClass(0); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CMainFrame diagnostics #ifdef _DEBUG void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMainFrame message handlers void CMainFrame::OnSetFocus(CWnd* pOldWnd) { pOldWnd; // forward focus to the view window m_wndView.SetFocus(); } BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { // let the view have first crack at the command if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) return TRUE; // otherwise, do default handling return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); } BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { if( m_wndMenuBar.TranslateMainFrameMessage(pMsg) ) return TRUE; return CFrameWnd::PreTranslateMessage(pMsg); } BOOL CMainFrame::DestroyWindow() { CWinApp * pApp = ::AfxGetApp(); ASSERT( pApp != NULL ); ASSERT( pApp->m_pszRegistryKey != NULL ); ASSERT( pApp->m_pszRegistryKey[0] != _T('\0') ); ASSERT( pApp->m_pszProfileName != NULL ); ASSERT( pApp->m_pszProfileName[0] != _T('\0') ); VERIFY( CExtControlBar::ProfileBarStateSave( this, pApp->m_pszRegistryKey, pApp->m_pszProfileName, pApp->m_pszProfileName ) ); VERIFY( g_CmdManager->SerializeState( pApp->m_pszProfileName, pApp->m_pszRegistryKey, pApp->m_pszProfileName, true ) ); g_CmdManager->ProfileWndRemove( GetSafeHwnd() ); return CFrameWnd::DestroyWindow(); } void CMainFrame::OnViewLikeOffice2k() { if( !g_PaintManager->IsKindOf( RUNTIME_CLASS(CExtPaintManagerXP) ) ) return; VERIFY( g_PaintManager.InstallPaintManager( new CExtPaintManager ) ); RecalcLayout(); RedrawWindow( NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN ); CExtControlBar::stat_RedrawFloatingFrames( this ); CExtControlBar::stat_RecalcBarMetrics( this ); } void CMainFrame::OnUpdateViewLikeOffice2k(CCmdUI* pCmdUI) { pCmdUI->Enable(); pCmdUI->SetRadio( g_PaintManager->IsKindOf( RUNTIME_CLASS(CExtPaintManagerXP) ) ? FALSE : TRUE ); } void CMainFrame::OnViewLikeOfficeXp() { if( g_PaintManager->IsKindOf( RUNTIME_CLASS(CExtPaintManagerXP) ) && (! g_PaintManager->IsKindOf( RUNTIME_CLASS(CExtPaintManagerOffice2003) ) ) ) return; VERIFY( g_PaintManager.InstallPaintManager( new CExtPaintManagerXP ) ); RecalcLayout(); RedrawWindow( NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN ); CExtControlBar::stat_RedrawFloatingFrames( this ); CExtControlBar::stat_RecalcBarMetrics( this ); } void CMainFrame::OnUpdateViewLikeOfficeXp(CCmdUI* pCmdUI) { pCmdUI->Enable(); pCmdUI->SetRadio( ( g_PaintManager->IsKindOf( RUNTIME_CLASS(CExtPaintManagerXP) ) && (! g_PaintManager->IsKindOf( RUNTIME_CLASS(CExtPaintManagerOffice2003) ) ) ) ? TRUE : FALSE ); } void CMainFrame::OnViewLikeOffice2003() { if( g_PaintManager->IsKindOf( RUNTIME_CLASS(CExtPaintManagerOffice2003) ) ) return; VERIFY( g_PaintManager.InstallPaintManager( new CExtPaintManagerOffice2003 ) ); RecalcLayout(); RedrawWindow( NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN ); CExtControlBar::stat_RedrawFloatingFrames( this ); CExtControlBar::stat_RecalcBarMetrics( this ); } void CMainFrame::OnUpdateViewLikeOffice2003(CCmdUI* pCmdUI) { pCmdUI->Enable(); pCmdUI->SetRadio( g_PaintManager->IsKindOf( RUNTIME_CLASS(CExtPaintManagerOffice2003) ) ? TRUE : FALSE ); } void CMainFrame::ActivateFrame(int nCmdShow) { // window placement persistence if( m_dataFrameWP.showCmd != SW_HIDE ) { SetWindowPlacement( &m_dataFrameWP ); CFrameWnd::ActivateFrame( m_dataFrameWP.showCmd ); m_dataFrameWP.showCmd = SW_HIDE; return; } CFrameWnd::ActivateFrame(nCmdShow); } void CMainFrame::OnClickedToolButton( UINT nID ) { ASSERT( IDC_BUTTON1 <= nID && nID <= IDC_BUTTON16 ); CString sMsg; sMsg.Format( _T("Tool button %d clicked"), nID - IDC_BUTTON1 + 1 ); ::AfxMessageBox( sMsg ); } void CMainFrame::OnClickedPaletteButtonL( UINT nID ) { ASSERT( IDC_BUTTON17 <= nID && nID <= IDC_BUTTON176 ); CDynamicPaletteButton * pBtn = (CDynamicPaletteButton *) CWnd::FromHandlePermanent( ::GetDlgItem( m_dlgForPanelPalette.m_hWnd, nID ) ); ASSERT_VALID( pBtn ); m_wndColorStatic.m_clrIn = pBtn->m_clr; m_wndColorStatic.Invalidate(); CString sMsg; sMsg.Format( _T("Palette button %d clicked (left mouse button)\nColor is #%02X%02X%02X"), nID - IDC_BUTTON17 + 1, int( GetRValue(pBtn->m_clr) ), int( GetGValue(pBtn->m_clr) ), int( GetBValue(pBtn->m_clr) ) ); ::AfxMessageBox( sMsg ); } void CMainFrame::OnClickedPaletteButtonR( UINT nID ) { nID -= 160; ASSERT( IDC_BUTTON17 <= nID && nID <= IDC_BUTTON176 ); CDynamicPaletteButton * pBtn = (CDynamicPaletteButton *) CWnd::FromHandlePermanent( ::GetDlgItem( m_dlgForPanelPalette.m_hWnd, nID ) ); ASSERT_VALID( pBtn ); m_wndColorStatic.m_clrOut = pBtn->m_clr; m_wndColorStatic.Invalidate(); CString sMsg; sMsg.Format( _T("Palette button %d clicked (right mouse button)\nColor is #%02X%02X%02X"), nID - IDC_BUTTON17 + 1, int( GetRValue(pBtn->m_clr) ), int( GetGValue(pBtn->m_clr) ), int( GetBValue(pBtn->m_clr) ) ); ::AfxMessageBox( sMsg ); }